package com.cn.wanxi.util;

public class MyHelp {
    /** 2020--12--1
     * 1.注册逻辑--更具用户名查询是否有值
     * 2.验证码
     * 3.登录：判断验证码   判断用户名和密码是否正确
     * 4：注意：流程
     * html页面---css样式---js判断正则表达式和Ajax传值---
     * servlet  六大步骤 ----service 逻辑判断---dao 封装sql和resultset集合--jdbc连接数据库
     */
    /**
     * 2020-12-2
     * 1.管理页面布局  calc
     * 2.菜单js用法
     * 3.自定义表格
     */
    /**
     * 2020-12-3
     * 1.查询用户数据 -- js部分   for     字符串拼接  赋值 注意：引号
     * 2.删除：
     * 3.编辑：点击编辑时跳转页面，将数据传输到另一个页面的两种方式
     * 4.在编辑页面得到传递的数据，加载完成页面时通过id查询数据
     * 5.提取公共的myAjax
     * 6.单选复选框赋值
     * 7.后台代码--servlet  -service--dao--jdbc
     * 8.sql语句  ：修改，删除 ，查询  注意字符串需要加引号，
     * 9.前端js   replace，split
     * 10：一个方法里面写一件事情，如果有多个事情，需要单独写方法
     * 11：注意写注释
     */
    /**
     * 2020-12-4
     * 产品查询
     * 1.先做后端接口，提供前端调用数据 /back/product/findAll  六大步骤
     * 2.service
     * 3.dao
     * 4.html 前端页面
     * 5. css  因为表格和搜索样式已经写完，公用
     * 6.js  页面加载时需要执行方法  findAll   setData
     *
     *
     * 1.产品注册  --
     * 2.菜系查询
     * 3.将页面的值传递到后台--普通方法ajax不能得到文件，所以需要格式为formdata
     * 4.注意：ajax必须添加 processData : false,
     *         contentType : false,
     * 5.引入io 包 两个
     * 6.servlet代码，需要大家熟悉
     *   1）判断是否为formdata格式
     *   2）将所有数据存入缓存文件
     *   3）将请求数据从缓存里面拿出，放入fileItem里面
     *   4）对文件进行遍历
     *   5）普通表单数据
     *       文件数据的拿值
     *       需要对每一个文件的名字进行重命名，保证存入的路径不能重复
     *       fileItem.write(file);通过此句话保存
     */
    /**
     * 2020/12//7
     * 1.页面必须通过formData的格式进行传值
     * 2.后台用req取得所有的数据，因为取数据是很多地方都需要用，所以提取公共部分
     * 3.因为我们图片地址可能随时修改，所以将地址保存到myPath公共地址类，
     * 4.同样，需要对当前地址进行判断是否存在，不存在则创建
     * 5.将所有取的前端的地址，保存在request的作用域里面，以便封装数据
     * 6.在servlet里面通过req.getAttribute("name");
     * 7.String name  需要的值是String，req得到的值是Object，所以需要强制转换
     * 8.封装数据到ProductModel
     *
     */
    /**
     * 2020/12/8
     * wangEdit富文本编辑器
     * 1.下载wangEdit的js包
     * 2.在需要的html定义一个id：content
     * 3.在当前id的后面添加创建富文本的wangEditor.min.js
     *   var E = window.wangEditor;
     *     var edit = new E('#content');
     *     edit.create();
     * 4.对富文本进行设置：后台图片的接口，导航样式，
     * 5.在后台写富文本的接口，返回格式一定为/loadImg/img
     *  jsonObject.put("url", req.getAttribute("imgHref"));
     * 6.学富文本之前应该先学习图片上传 LoadImg.loadImg(req);
     * 7.得到富文本的内容：edit.txt.html()
     * 8.注意：在前台上传图片时，有可能用户不需要改变图片的地址，所以需要在sql语句去判断
     */

    /**
     * 2020-12-09
     * 模糊查询
     * 1.在页面写需要模糊查询的代码
     * 注意：时间和数字需要区间表示，
     * 2.在js里面findAll添加data数据
     * 3.在servlet里面添加获取数据和封装数据
     * 4.在数据实现层添加sql条件语句
     * 5.find_in_set
     */

    /**
     * 图片上传
     * 1.加载io流的两个包
     * 2.新建html页面
     * 3.前端向后端传值的格式：因为是文件传输（io）必须是formdata格式
     * 4.通过Ajax传输时，必须加
     * processData: false,
     * contentType: false,
     * 5.得到文件的格式：$("#imgHref")[0].files[0]
     * 6.后台需要得到前端的数据，所有的数据都是通过请求对象。request
     * 7.需要对request进行读取
     * 8.因为很多地方都用到图片读取，所以提起一个公共的类，方法里面
     * 9. 判断当前传输过来的格式是否为formdata格式ServletFileUpload.isMultipartContent(req)
     * 10.创建工厂用于缓存页面传递过来的数据（req）
     * 11.将所有数据强制装好为servlet能够读取的文件ServletFileUpload
     * 12.通过Java集合得到所有数据List<FileItem> fileItemList = sfu.parseRequest(req);
     * 13.需要通过单线程的方式避免出错。线程安全
     * 14.判断当前集合是否有数据，有数据则便利出来while (fileItems.hasNext()) {
     * 15.前端传递过来的数据有两种：一种：普通数据 另一种：文件
     * 16.如果时普通数据，则直接取出，并存入req，
     * 17.如果是文件：
     * 1）则需要对文件名称进行修改。添加一个唯一字符，如果文件名一样，则报错
     * 2）将当前接受的文件保存到指定的路径--
     * 3）如果像提交后在页面上直接显示，需要在out的相对应的路径复制当前文件
     * 18.在servlet里面req.getAttribute("name")取出刚刚存入的数据
     *
     *
     */
    /**
     * 2020-12-10
     * 分页
     * 1.后台   只需修改servlet 和daoimpl层
     *   servlet层需要得到分页的数据：curPage，pageSize
     *   数据实现层：加limit：limit  (curPage-1)*pageSize,pageSize//分页公司
     * 2.前端：html，css
     * js：首页：默认条数
     * 第一页：curPage=1
     * 上一页：curPage--
     * 下一页：curPage++
     * 尾页：需要得到总条数totalCount，后台Java代码编写
     * js数学公司：向上取整，向下取整，随机数
     * 注意：
     * 上一页当当前页为0或者负数
     * 下一页超过了总页数
     *
     * 整合分页方法到一个方法：switch    break;return;continue
     *
     *
     */
    /**
     * 2020-12-14
     * session安全认证：目的：防止沒有登录的用户访问后台数据
     * 有两种方式：
     * 首先要将登录信息存入session或者local
     * 第一种：前端判断 判断当前用户是否已经登录，如果没有登录则返回登录页面
     * 第二种：后端判断：过滤器：
     * 1.乱码可以统一处理
     * 2.判断是否需要过滤的地址，后台才需要过滤
     * 3.判断当前用户是否已经登录
     * 4.返回结果jsonObject.put("result", "noLogin");
     * 对于文件上传，做认证时，req只能被用一次，所如果在过滤器里面用了，则在后台 LoadImg.loadImg(req);拿不到值
     * 所以，认证只能放在当前访问路径的servlet里面
     *
     * 在登录的时候，不能直接将字符串做一个key值进行存储到session
     * req.getSession().setAttribute(“username”, username);
     * 而是应该req.getSession().setAttribute(username, username);
     * 因为key值一样，如果有多个人同时登录，则第二个人把第一个人的登录名给替换掉
     * 修改：myfileter：
     *  String key = req.getParameter("loginUsername");
     *  String username = (String) session.getAttribute(key);
     *  前台myajax：需要传一个登录名到后台：
     *  let user = {
     *         loginUsername: localStorage.getItem("loginUsername")
     *     };
     *      data: Object.assign(data,user),将传递过来的data和用户信息合成一个json
     *
     *
     *  同时：对于文件传入后台也需要修改：
     *   String key = req.getParameter("loginUsername");
     *   String username = (String) session.getAttribute(key);
     *
     *
     * 过滤器监听器拦截器的区别？
     * servlet 域对象和jsp的四大作用域对象区别？
     */
    /**
     * 2021-1-4
     * redis
     * 1.应用场景
     * 2.包下载jedis
     * 3.数据类型String
     * 4.其他数据类型练习
     */

    /**
     * 2021-1-7
     * mybatis
     * 1.导包mybatis包
     * 2.建立资源文件---
     * 3.创建config.xml配置文件
     *      1.读取jdbc的连接内容
     *      2.打印sql语句
     *      3.连接池 JDBC 配置
     *      4.mapper   主要目的写sql语句  <mapper resource="/mapper/userMapper.xml"/>
     * 4.创建jdbc.properties
     * 5.创建mapper里面的xml文件userMapper.xml
     * 6.写读取mybatis，读取config文件的java代码
     *      GetSqlSession 注意：1.修改资源文件2.openSession(true)
     * 7.修改userMapper.xml
     *    <mapper namespace="com.cn.wanxi.dao.UserDao">对应的dao接口
     *     <insert id="add"> id对应的是当前接口的方法名
     *     sql语句和以前一样，只不过取数据比以前更简单  #｛｝
     * 8.修改以前的实现层
     *  GetSqlSession.getSqlSession().insert("com.cn.wanxi.dao.UserDao.add", userModel);
     *  insert的两个参数：
     *   第一个参数：找到mapper里面sql语句的路径
     *   第二个参数：传递的对象的值
     *  注意的地方：
     *  1.转义字符
     *  2.模糊查询  concat
     *  3.集合 foreach
     *  4.参数类型写全
     *
     */
    /**
     * 2021-1-8
     * druid配置步骤
     * 1.导入jar包
     * 2.druid.xml配置
     *    修改mapper映射文件
     *    修改DataSource<dataSource type="DRUID">
     *    加入一个读取DataSource的类
     *    <typeAliases>
     *         <typeAlias type="com.cn.wanxi.util.DruidDataSourceFactory"
     *                    alias="DRUID"/>
     *     </typeAliases>
     * 3.创建一个工厂 主要目的重写DataSource
     *   DruidDataSourceFactory
     * 4.修改：GetSqlSession类里面的资源文件
     * String resource = "druid.xml";
     *
     *
     *
     */
    /**
     * 2021-1-8
     * 前端数据展示
     * 1.页面加载时需要访问后台 findAll
     * 2.如果头部和尾部数据不显示，说明findAll时间比较短，top和foot还没有加载出来
     * 3.所以，需要将头部和尾部的数据单独提取出来，放在尾部的html里面进行查询操作
     * 4.难点：详细页面有一个上一篇 下一篇，如果当前的id在中间，则直接查询三条数据
     *
     select * from product where id=(SELECT max(id) FROM product where id<42)
     union
     SELECT * FROM product where id=42
     union
     select * from product where id=(SELECT min(id) FROM product where id>42)
     当只有两条数据时，会出现两种情况，第一条和最后一条
     当是第一条时，则当前拿到的id是返回过来的数据的第一条
     当是最后一条是，则返回倒数两条数据
     */
}
